home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / FEBE (Firefox Environment Backup Extension) 5.0 / febe-5.0-fx.xpi / chrome / febe.jar / content / febeScheduleBackup.js < prev    next >
Text File  |  2007-06-15  |  11KB  |  306 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 5.0
  4.  
  5.     var febeBackupInProgress = new Boolean(false);    // Is a backup currently running?
  6.     var febeScheduledBackupID = new Number;        // PID of scheduled backup
  7.     var febeScheduledWarningID = new Number;        // PID of scheduled backup warning
  8.     var febeNextBackup = new String();                // Text description of next scheduled backup
  9.     var febeSchedule = new String()                // Scheduled backup frequency
  10.     var febeIsScheduled = new Boolean(false)        // Is a backup scheduled?
  11.     var febeSetTimeoutID = [];                        // Array holing settimeout ids
  12.     var febeDailyHour = new Number;                // Hour(00 - 23) of daily backup
  13.     var febeDailyMinute = new Number;                // Minute (0 - 55) of daily backup, 5 min increments
  14.     var febeWeeklyDay = new Number;                // Day of week (sun=0 ... sat=6) of daily backup
  15.     var febeWeeklyHour = new Number;                // Hour(00 - 23) of weekly backup
  16.     var febeWeeklyMinute = new Number;                // Minute (0 - 55) of weekly backup, 5 min increments
  17.     var febeMonthlyDay = new Number;                // Day of month (1 - 28) of monthly backup
  18.     var febeMonthlyHour = new Number;                // Hour(00 - 23) of monthly backup
  19.     var febeMonthlyMinute = new Number;            // Minute (0 - 55) of monthly backup, 5 min increments
  20.     var febeNB = new Date();                        // Next backup date
  21.  
  22. function febeScheduleBackup(){
  23.   // Determine when (or if) a scheduled backup will take place and put it in the queue
  24.     if(!febeScheduleInit()){return;}
  25.     
  26.     var now = new Date().getTime();    // Current time in milliseconds    
  27.     var wait = new Number;                // Number of milliseconds until next backup
  28.     var oneDay = 24 * 60 * 60 * 1000;    // One day in milliseconds
  29.     var tmp = new Number;
  30.     febeNB = new Date();
  31.     febeNB.setSeconds(0);
  32.     var d = new Date();
  33.     switch(febeSchedule){
  34.         case "daily":
  35.             febeNB.setHours(febeDailyHour);
  36.             febeNB.setMinutes(febeDailyMinute);
  37.             wait = febeNB.getTime() - now;
  38.             if(wait <= 0){            // Scheduled time already passed
  39.                 tmp = febeNB.getTime();
  40.                 tmp += oneDay;        // Add a day
  41.                 febeNB.setTime(tmp);    
  42.                 wait = febeNB.getTime() - now;
  43.             }//if
  44.             break;
  45.         case "weekly":
  46.             var today = d.getDay();
  47.             tmp = today * oneDay;
  48.             d.setTime(now-tmp);
  49.             d.setHours(0,0,0);        // Last Sunday, Midnight
  50.             var sunday = d.getTime();
  51.             tmp = febeWeeklyDay * oneDay;
  52.             febeNB.setTime(sunday + tmp);
  53.             febeNB.setHours(febeWeeklyHour);
  54.             febeNB.setMinutes(febeWeeklyMinute);
  55.             wait = febeNB.getTime() - now;
  56.             if(wait <= 0){            // Scheduled time already passed
  57.                 tmp = febeNB.getTime();
  58.                 tmp += (oneDay * 7);// Add a week
  59.                 febeNB.setTime(tmp);    
  60.                 wait = febeNB.getTime() - now;
  61.             }//if
  62.             break;
  63.         case "monthly":
  64.             febeNB.setDate(febeMonthlyDay);
  65.             febeNB.setHours(febeMonthlyHour);
  66.             febeNB.setMinutes(febeMonthlyMinute);
  67.             wait = febeNB.getTime() - now;
  68.             if(wait <= 0){            // Scheduled time already passed
  69.                 var numDaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
  70.                 var thisMonth = d.getMonth();
  71.                 var nextMonth = thisMonth + 1;
  72.                 if(nextMonth == 12){nextMonth = 0};
  73.                 var dayOfMonth = d.getDate();
  74.                 var daysLeftThisMonth = numDaysInMonth[thisMonth] - dayOfMonth; 
  75.                 tmp = (daysLeftThisMonth +1) * oneDay;
  76.                 febeNB.setTime(now + tmp);
  77.                 febeNB.setHours(0,0,0);        // First day of next month at Midnight
  78.                 febeNB.setDate(febeMonthlyDay);
  79.                 febeNB.setHours(febeMonthlyHour);
  80.                 febeNB.setMinutes(febeMonthlyMinute);
  81.                 wait = febeNB.getTime() - now;
  82.             }//if
  83.             break;
  84.     }//switch
  85.     
  86.     // Schedule the backup
  87.     for(var i in febeSetTimeoutID){
  88.         var to = new febeSetTimeoutObj;
  89.         to.PID = febeSetTimeoutID[i].PID;
  90.         clearTimeout(to.PID);
  91.     }//for
  92.     febeSetTimeoutID = [];
  93.     
  94.     // Warn 1 minute before backup starts
  95.     var to = new febeSetTimeoutObj;
  96.     to.PID = setTimeout("febeWarn()",wait-60000);
  97.     to.Process = "febeWarn()";
  98.     febeSetTimeoutID.push(to);
  99.     to = new febeSetTimeoutObj;
  100.     to.PID = setTimeout("febeInit()",wait);
  101.     to.Process = "febeInit()";
  102.     febeSetTimeoutID.push(to);
  103. //alert("In febeScheduleBackup: "+febeSetTimeoutID)    
  104.     febeSetStatus();
  105. }//febeScheduleBackup()
  106.  
  107. function febeScheduleInit(){
  108.     // Get daily time info
  109.     var prefName = "extensions.febe.schedule.daily.hour";
  110.     if(febePrefs.prefHasUserValue(prefName)){
  111.         febeDailyHour = febePrefs.getIntPref(prefName);
  112.     } else {
  113.         febePrefs.setIntPref(prefName,1);
  114.         febeDailyHour = 1;
  115.     }//if
  116.     var prefName = "extensions.febe.schedule.daily.minute";
  117.     if(febePrefs.prefHasUserValue(prefName)){
  118.         febeDailyMinute = febePrefs.getIntPref(prefName);
  119.     } else {
  120.         febePrefs.setIntPref(prefName,0);
  121.         febeDailyMinute = 0;
  122.     }//if
  123.  
  124.     // Get weekly time info
  125.     var prefName = "extensions.febe.schedule.weekly.day";
  126.     if(febePrefs.prefHasUserValue(prefName)){
  127.         febeWeeklyDay = febePrefs.getIntPref(prefName);
  128.     } else {
  129.         febePrefs.setIntPref(prefName,0);
  130.         febeWeeklyDay = 0;
  131.     }//if
  132.     var prefName = "extensions.febe.schedule.weekly.hour";
  133.     if(febePrefs.prefHasUserValue(prefName)){
  134.         febeWeeklyHour = febePrefs.getIntPref(prefName);
  135.     } else {
  136.         febePrefs.setIntPref(prefName,1);
  137.         febeWeeklyHour = 1;
  138.     }//if
  139.     var prefName = "extensions.febe.schedule.weekly.minute";
  140.     if(febePrefs.prefHasUserValue(prefName)){
  141.         febeWeeklyMinute = febePrefs.getIntPref(prefName);
  142.     } else {
  143.         febePrefs.setIntPref(prefName,0);
  144.         febeWeeklyMinute = 0;
  145.     }//if
  146.  
  147.     // Get monthly time info
  148.     var prefName = "extensions.febe.schedule.monthly.day";
  149.     if(febePrefs.prefHasUserValue(prefName)){
  150.         febeMonthlyDay = febePrefs.getIntPref(prefName);
  151.     } else {
  152.         febePrefs.setIntPref(prefName,1);
  153.         febeMonthlyDay = 1;
  154.     }//if
  155.     var prefName = "extensions.febe.schedule.monthly.hour";
  156.     if(febePrefs.prefHasUserValue(prefName)){
  157.         febeMonthlyHour = febePrefs.getIntPref(prefName);
  158.     } else {
  159.         febePrefs.setIntPref(prefName,1);
  160.         febeMonthlyHour = 1;
  161.     }//if
  162.     var prefName = "extensions.febe.schedule.monthly.minute";
  163.     if(febePrefs.prefHasUserValue(prefName)){
  164.         febeMonthlyMinute = febePrefs.getIntPref(prefName);
  165.     } else {
  166.         febePrefs.setIntPref(prefName,0);
  167.         febeMonthlyMinute = 0;
  168.     }//if
  169.  
  170.     // Get scheduled backup frequency
  171.     var prefName = "extensions.febe.schedule.frequency";
  172.     if(febePrefs.prefHasUserValue(prefName)){
  173.         febeSchedule = febePrefs.getCharPref(prefName);
  174.     } else {
  175.         febePrefs.setCharPref(prefName,"none");
  176.         febeSchedule = "none";
  177.     }//if
  178.     
  179.     // Set scheduled backup string
  180.     var prefName = "extensions.febe.schedule.description";
  181.     if(febePrefs.prefHasUserValue(prefName)){
  182.         febeNextBackup = febeGetUnicharPref(prefName);
  183.     } else {
  184.         febeSetUnicharPref(prefName,febeMsg[113]);
  185.         febeNextBackup = febeMsg[113];
  186.     }//if
  187.  
  188.     febeIsScheduled = true;
  189.     if(febeSchedule == "none"){
  190.         febeIsScheduled = false;
  191.     }//if
  192.     febeSetStatus();
  193.     return febeIsScheduled;
  194. }//febeScheduleInit()
  195.  
  196. function febeScheduleChange(){
  197.     febeScheduleInit();
  198.     switch(febeSchedule){
  199.         case "daily":
  200.             febeDisableDaily(false);
  201.             febeDisableWeekly(true);
  202.             febeDisableMonthly(true);        
  203.             febeDisableScheduleInfo(false);    
  204.             break;
  205.         case "weekly":
  206.             febeDisableDaily(true);
  207.             febeDisableWeekly(false);
  208.             febeDisableMonthly(true);        
  209.             febeDisableScheduleInfo(false);    
  210.             break;
  211.         case "monthly":
  212.             febeDisableDaily(true);
  213.             febeDisableWeekly(true);
  214.             febeDisableMonthly(false);
  215.             febeDisableScheduleInfo(false);        
  216.             break;
  217.         case "none":
  218.             febeDisableDaily(true);
  219.             febeDisableWeekly(true);
  220.             febeDisableMonthly(true);
  221.             febeDisableScheduleInfo(true);            
  222.             break;
  223.     }//switch
  224. }//febeScheduleChange()
  225.  
  226. function febeDisableDaily(state){
  227.     document.getElementById("dailylabelID").disabled = state;
  228.     document.getElementById("dailyHourID").disabled = state;
  229.     document.getElementById("dailyMinuteID").disabled = state;
  230. }//febeDisableDaily()
  231.  
  232. function febeDisableWeekly(state){
  233.     document.getElementById("weeklylabelID").disabled = state;
  234.     document.getElementById("weeklylabelatID").disabled = state;
  235.     document.getElementById("weeklyDayID").disabled = state;
  236.     document.getElementById("weeklyHourID").disabled = state;
  237.     document.getElementById("weeklyMinuteID").disabled = state;
  238. }//febeDisableWeekly()
  239.  
  240. function febeDisableMonthly(state){
  241.     document.getElementById("monthlylabelID").disabled = state;
  242.     document.getElementById("monthlylabelatID").disabled = state;
  243.     document.getElementById("monthlyDayID").disabled = state;
  244.     document.getElementById("monthlyHourID").disabled = state;
  245.     document.getElementById("monthlyMinuteID").disabled = state;
  246. }//febeDisableDaily()
  247.  
  248. function febeDisableScheduleInfo(state){
  249.     document.getElementById("setschedulebtn").disabled = state;
  250.     document.getElementById("setschedulelbl").disabled = state;
  251.     document.getElementById("nextbackupdate").disabled = state;
  252.     document.getElementById("nextbackupdate").value=febeMsg[113];
  253. }//febeDisableDaily()
  254.  
  255. function febeSetScheduleBtn(){
  256.     febeScheduleBackup();
  257.     if(febeIsScheduled == true){
  258.         document.getElementById("nextbackupdate").value= febeLocalizedDate(febeNB);
  259.     }else{
  260.         document.getElementById("nextbackupdate").value = febeMsg[113];
  261.     }//if
  262.     febeSetStatus();
  263. }//febeSetScheduleBtn()
  264.  
  265. function febeSetStatus(){
  266.   // Set statusbar icon
  267.     // Pointer to main browser window
  268.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  269.            .getService(Components.interfaces.nsIWindowMediator);
  270.     var win = wm.getMostRecentWindow("navigator:browser");
  271.     var d = win.document.getElementById("febestatusbar");
  272.     
  273.     var prefName = "extensions.febe.schedule.description";
  274.     //febeNextBackup = febeNB;
  275.     febeNextBackup = febeLocalizedDate(febeNB);
  276.     febeSetUnicharPref(prefName,febeNextBackup);
  277.     
  278.     if(febeIsScheduled == true){
  279.         d.setAttribute("status","normal");
  280.         var tmp = febeMsg[114] + febeNextBackup;
  281.     }else{
  282.         d.setAttribute("status","nobackup");
  283.         var tmp = febeMsg[113];
  284.     }//if
  285.     d.tooltipText = tmp;
  286.     
  287.     // Hide statusbar icons?
  288.     var prefName = "extensions.febe.hideIcons"
  289.     if(febePrefs.prefHasUserValue(prefName)){
  290.         febeHideIcons = febePrefs.getBoolPref(prefName);
  291.     }else{
  292.         febeHideIcons = false;
  293.         febePrefs.setBoolPref(prefName,febeHideIcons);
  294.     }//if
  295.     d.setAttribute("hidden",febeHideIcons);
  296. }//febeSetStatus()
  297.  
  298. function febeInvert(){
  299.   // Bug?  "oncommand" executed before preference change, so invert checked status
  300.     febeHideIcons = !(document.getElementById("hideIcons").value);
  301.     var prefName = "extensions.febe.hideIcons"
  302.     febePrefs.setBoolPref(prefName,febeHideIcons);
  303.     febeSetStatus();
  304. }//febeInvert()
  305.  
  306. //alert("febeScheduleBackup.js");